import json
import pytest
# 待测数据
def add(x, y):
    return x + y
# 测试数据 - pytest 实现参数化，规范的 数据格式为[(),(),()]
# test_data = [(1, 2, 3), (10, 20, 30), (100, 200, 300)]

# 读取json文件，获取json文件转换成parametrize()需要的[(),(),()]格式数据
def read_json_file(filename):  # filename代表 带读取的json文件
    # 读取json文件
    with open(filename,"r",encoding="utf8") as f:
        json_data=json.load(f)
        print("json数据：", json_data)

    # 创建一个空列表必须在for之前
    data_list = []

    # 将读到的数据转换成[(),(),()]格式数据
    for data in json_data:
        # 提取value，转换成元组
        tmp = tuple(data.values())
        # 追加到列表
        data_list.append(tmp)
    # 循环结束后 查看
    # print(data_list)

    # 将[(),(),()]格式数据格式返回 不能放在for内
    return data_list


if __name__ == '__main__':
    res = read_json_file("./add.json")
    print("res=", res)




# 测试类
class TestAdd(object):
    @pytest.mark.parametrize("x, y, expect", read_json_file("add.json"))  # 参数2必须是[(),(),()]格式的数据
    def test_add(self, x, y, expect):
        ret = add(x, y)
        assert expect == ret


    # # 测试方法1
    # def test01_add(self):
    #     ret = add(1,2)
    #     assert 3 == ret
    #
    # # 测试方法2
    # def test02_add(self):
    #     ret = add(10, 20)
    #     assert 30 == ret
    #
    # # 测试方法3
    # def test03_add(self):
    #     ret = add(100, 200)
    #     assert 300 == ret
